#ifndef _APP_FLASH_H
#define _APP_FLASH_H

#include "sn_driver.h"
/*
 *  增加flash变量流程：
 *  1. 修改FLASH_USER_DOMAIN +字节数
 *  2. 在save_param_t 中添加增加的变量
 *  3. 在.c中增加 app_store_xxx_func()
 *                app_loade_xxx_func()
 */
#define FLASH_USER_DOMAIN 60

struct save_param_t {
    uint8_t magic1         ;
    uint8_t id             ;
    struct vol_fator_t vol_fator[ADC_MAX_NUM];//ADC_MAX_NUM = 5 6*5=30
    struct dac_factor_t dac_factor;
    uint16_t vout_max_val  ;//过压值
    uint16_t iout_max_val  ;//过流值
    uint16_t vout_min_val  ;//欠压值
    uint16_t vin_max_val   ;//输入过压
    uint16_t vin_min_val   ;//输入欠压
    uint16_t temp_max_val  ;//过温保护值
    uint16_t fan_fault_val ;//风扇故障值
    uint16_t  vout_max_default;//默认最大值
	  uint32_t  can_addr;//can id
    
    uint8_t reserved[1024-FLASH_USER_DOMAIN] ;
};
struct store_dev_t
{
    union dev_param_t 
    {
        struct save_param_t param;
        uint8_t param_buf[1024];
    }dev_param;
    struct flash_dev_t *fs_dev;
};
extern struct store_dev_t store_device;
void app_store_init(void);
void app_store_adc_fator(uint8_t num, struct vol_fator_t *fator_val);
void app_load_adc_fator(uint8_t num,struct vol_fator_t *fator_val);
void app_store_dac_fator(struct dac_factor_t *factor);
void app_load_dac_fator(struct dac_factor_t *factor);
void app_store_can_addr(uint8_t addr);
uint8_t app_load_can_addr(void);
/**
 * @brief 读取模块过压值
 * 
 * @return uint16_t 
 */
uint16_t app_load_vout_max(void);
/**
 * @brief 存储模块过压值
 * 
 * @param value 
 */
void app_store_vout_max(uint16_t value);
/**
 * @brief 读取模块过流值
 * 
 * @return uint16_t 
 */
uint16_t app_load_iout_max(void);

/**
 * @brief 存储模块过流值
 * 
 * @param value 
 */
void app_store_iout_max(uint16_t value);
/**
 * @brief 存储模块输出欠压值
 * 
 * @param value  
 */
void app_store_vout_min(uint16_t value);
/**
 * @brief 读取模块输出欠压值
 * 
 * @return uint16_t 
 */
uint16_t app_load_vout_min(void);
/**
 * @brief 存储模块输入过压值
 * 
 * @param value 
 */
void app_store_vin_max(uint16_t value);
/**
 * @brief 读取模块输入过压值
 * 
 * @return uint16_t 
 */
uint16_t app_load_vin_max(void);
/**
 * @brief 存储输入欠压值
 * 
 * @param value 
 */
void app_store_vin_min(uint16_t value);
/**
 * @brief 读取模块欠压值
 * 
 * @return uint16_t 
 */
uint16_t app_load_vin_min(void);
/**
 * @brief 存储模块过温值
 * 
 * @param value 
 */
void app_store_temp_max(uint16_t value);
/**
 * @brief 读取模块过温值
 * 
 * @return uint16_t 
 */
uint16_t app_load_temp_max(void);


/**
 * @brief 存储模块风扇故障
 * 
 * @param value 
 */
void app_store_fan_max(uint16_t value);
/**
 * @brief 读取模块风扇故障
 * 
 * @return uint16_t 
 */
uint16_t app_load_fan_max(void);
/**
 * @brief 存储模块输出默认最大值
 * 
 * @param value 
 */
void app_store_vout_max_default(uint16_t value);
/**
 * @brief 读取模块输出默认最大值
 * 
 * @return uint16_t 
 */
uint16_t app_load_vout_max_default(void);
/**
 * @brief 存储模块CAN 地址默认最大值
 * 
 * @param value 
 */
void app_store_can_addr_default(uint32_t value);
/**
 * @brief 读取模块CAN 地址默认最大值
 * 
 * @return uint32_t 
 */
uint32_t app_load_can_addr_default(void);
#endif // !_APP_FLASH_H


